package br.com.cogerh.sidec.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;

import br.com.cogerh.sidec.model.Projeto;
import br.com.cogerh.sidec.util.HibernateUtil;

public class ProjetoImpl implements ProjetoDAO {

	@Override
	public void salvar(Projeto projeto) {
		Session sessao = HibernateUtil.getSessionFactory().getCurrentSession();
		Transaction tx = sessao.beginTransaction();
		try {
			sessao.save(projeto);
			sessao.flush();
			sessao.close();
			tx.commit();
		} catch (HibernateException e) {
			tx.rollback();
		}

	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Projeto> listar() {
		Session sessao = HibernateUtil.getSessionFactory().getCurrentSession();
		Transaction tx = sessao.beginTransaction();

		List<Projeto> lista = new ArrayList<Projeto>();
		try {
			Criteria criteria = sessao.createCriteria(Projeto.class);
			criteria.addOrder(Order.asc("nome"));
			lista = criteria.list();
			sessao.close();
		} catch (HibernateException e) {
			tx.rollback();
		}

		return lista;
	}

	@Override
	public void editar(Projeto projeto) {
		Session sessao = HibernateUtil.getSessionFactory().getCurrentSession();
		Transaction tx = sessao.beginTransaction();
		try {
			sessao.merge(projeto);
			sessao.flush();
			sessao.close();
			tx.commit();
		} catch (HibernateException e) {
			tx.rollback();
		}

	}

	@Override
	public void excluir(Projeto projeto) {
		Session sessao = HibernateUtil.getSessionFactory().getCurrentSession();
		Transaction tx = sessao.beginTransaction();
		try {
			sessao.delete(projeto);
			sessao.flush();
			sessao.close();
			tx.commit();
		} catch (HibernateException e) {
			tx.rollback();
		}

	}

	@Override
	public void fecharSessao() {

	}

}
